#include <t_stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>


#define MSG_TYPE_B	11
struct msgmbuf 
{
    long mtype;       /* message type, must be > 0 */
    char mtext[100];    /* message data */
	int pid;
};

int main(void){
    //创建key值
    key_t key= ftok(".",1);
    if(key==-1)E_MSG("ftok",-1);

    //创建消息队列, 如果内核不存在队列就创建
   int msg_id = msgget(key, 0);
    if (msg_id == -1) {
        // 如果获取失败，尝试创建消息队列
        msg_id = msgget(key, IPC_CREAT | 0x0666);
        if (msg_id == -1) E_MSG("msgget", -1);
    }
    //定义一个消息变量用来接收消息
      struct msgmbuf msg;
      msg.pid=getpid();//获取当前进程pid
      msg.mtype=MSG_TYPE_B;


      //开始循环写入
      while(1){
        //写入数据
        fgets(msg.mtext,sizeof(msg.mtext),stdin);
        //发送数据
        msgsnd(msg_id,&msg,sizeof(msg),0);
         
         if(strncmp(msg.mtext, "exit", 4) == 0)
		{
			break;
		}

        
      }
      msgctl(msg_id, IPC_RMID, NULL);

    return 0;
}